﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace System.IO
{
    public abstract class AbstractDirectoryInfo : AbstractFileSystemInfo
    {
        #region Async

        public abstract void MoveToAsync(AbstractDirectoryInfo dir, Action<Exception> callback);

        public abstract void MoveToAsync(string destDirName, Action<Exception> callback);

        public abstract void GetFilesAsync(string searchPath, Action<AbstractFileInfo[], Exception> callback);

        public abstract void GetFilesAsync(Action<AbstractFileInfo[], Exception> callback);

        public abstract void DeleteAsync(bool recursive, Action<Exception> callback);

        public abstract void CreateSubdirectoryAsync(string path, Action<AbstractDirectoryInfo, Exception> callback);

        public abstract void CreateAsync(Action<Exception> callback);

        #endregion Async

        #region Sync

        public abstract void Create();

        public abstract void MoveTo(string destDirName);

        public abstract AbstractFileInfo[] GetFiles(string searchPath);

        public abstract AbstractFileInfo[] GetFiles();

        public abstract AbstractDirectoryInfo[] GetDirectories(string searchPath);

        public abstract AbstractDirectoryInfo[] GetDirectories();

        public abstract void Delete(bool recursive);

        public abstract AbstractDirectoryInfo CreateSubdirectory(string path);

        #endregion Sync

        public abstract AbstractDirectoryInfo Root { get; }

        public abstract AbstractDirectoryInfo Parent { get; }
    }
}